package com.beney.util.math;

import java.util.Random;

/**
 * 高中题目生成器
 * 单例模式 + 责任链模式
 *
 * @author Beney
 */
public class SeniorMath extends AbstractMath {

    /**
     * 生成器单例
     */
    private static SeniorMath generator;

    /**
     * 三角函数
     */
    private String[] trigFunc = {"sin", "cos", "tan"};

    private int need0;
    private int need1;
    private int need2;

    private AbstractMath lowerMathGenerator; // 下一个包装者

    private void initLower() {
        lowerMathGenerator = JuniorMath.getGenerator();
    }

    /**
     * 高中至少有一个sin|cos|tan
     *
     * 高中包装完后调用下层的服务继续随机包装
     * (小学(初中(高中)))
     */
    @Override
    protected String wrapVal(StringBuilder val) {
        if (need0-- > 0)        val.insert(0, trigFunc[0]);
        else if (need1-- > 0)   val.insert(0, trigFunc[1]);
        else if (need2-- > 0)   val.insert(0, trigFunc[2]);
        else {
            int t = new Random().nextInt(100);
            if (t < 15)         val.insert(0, trigFunc[0]);
            else if (t < 30)    val.insert(0, trigFunc[1]);
            else if (t < 35)    val.insert(0, trigFunc[2]);
        }
        return lowerMathGenerator.wrapVal(val); // 调用低一级的服务继续包装
    }

    @Override
    protected void initSpecificNeed() {
        int t = new Random().nextInt(90);
        if (t < 30) {
            need0 = 0;
            need1 = 0;
            need2 = 1;
        } else if (t < 60) {
            need0 = 0;
            need1 = 1;
            need2 = 0;
        } else {
            need0 = 1;
            need1 = 0;
            need2 = 0;
        }
    }

    /**
     * @return 高中数学题生成器
     */
    public static AbstractMath getGenerator()
    {
        if (generator == null)
            generator = new SeniorMath();
        generator.initLower();
        return generator;
    }
}
